﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.Windows.Forms;

namespace Ferreteria.Clases
{
    class InicializarBD
    {
        DisancoEntities context;

        public void Iniciar()
        {
            context = new DisancoEntities();

            if (context.Usuarios.Count() == 0)
            {
                if (CrearUsuarioAdmin())
                    MessageBox.Show("Usuario admin creado con exito");
            }

            if (context.Rubros.Count() == 0)
            {
                CrearRubros();
            }

            if (context.CondicionIVA.Count() == 0)
            {
                CrearCondicionesIVA();
            }
        }

        public bool CrearUsuarioAdmin()
        {
            //Creo uno llamado admin, con password admin, y privilegios de administrador
            try
            {
                MD5 md5Hash = MD5.Create();

                Usuarios userAdmin = new Usuarios();
                userAdmin.usuario_nombre = "admin";
                userAdmin.usuario_nombrecompleto = "Usuario administrador por defecto";
                userAdmin.usuario_categoria = Categoria.Administrador;
                userAdmin.usuario_pass = md5Hash.ComputeHash(Encoding.UTF8.GetBytes("admin"));

                context.Usuarios.AddObject(userAdmin);
                context.SaveChanges();

                return true;
            }
            catch (Exception error)
            {
               MessageBox.Show("No se pudo crear el usuario por defecto.\n\nEl error devuelto fue: \n\n" + error.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
               return false;
            }
        }

        public bool CrearRubros()
        {
            //Si no existen rubros creados, se crean los dos por defecto: Ferreteria y Sanitarios
            try
            {
                Rubros rubroFerreteria = new Rubros();
                rubroFerreteria.rubro_nombre = "Ferreteria";
                context.Rubros.AddObject(rubroFerreteria);

                Rubros rubroSanitarios = new Rubros();
                rubroSanitarios.rubro_nombre = "Sanitarios";
                context.Rubros.AddObject(rubroSanitarios);

                context.SaveChanges();
                return true;
            }
            catch (Exception error)
            {
                MessageBox.Show("No se pudieron crear los rubros por defecto.\n\nEl error devuelto fue: \n\n" + error.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
        }

        public bool CrearCondicionesIVA()
        {
            try
            {
                CondicionIVA condRI = new CondicionIVA();
                condRI.condicion_nombre = "Responsable Inscripto";
                condRI.condicion_sigla = "RI";
                context.CondicionIVA.AddObject(condRI);

                CondicionIVA condCF = new CondicionIVA();
                condCF.condicion_nombre = "Consumidor Final";
                condCF.condicion_sigla = "CF";
                context.CondicionIVA.AddObject(condCF);

                CondicionIVA condRNI = new CondicionIVA();
                condRNI.condicion_nombre = "Responsable No Inscripto";
                condRNI.condicion_sigla = "RNI";
                context.CondicionIVA.AddObject(condRNI);

                CondicionIVA condEX = new CondicionIVA();
                condEX.condicion_nombre = "Exento";
                condEX.condicion_sigla = "EX";
                context.CondicionIVA.AddObject(condEX);

                CondicionIVA condMT = new CondicionIVA();
                condMT.condicion_nombre = "Monotributista";
                condMT.condicion_sigla = "MT";
                context.CondicionIVA.AddObject(condMT);
                
                context.SaveChanges();
                return true;
            }
            catch (Exception error)
            {
                MessageBox.Show("No se pudieron cargar las condiciones de IVA.\n\nEl error devuelto fue: \n\n" + error.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
        }
    }
}
